#include <iostream>
#include <stdio.h>
using namespace std;

//parent类中发生func重载。重载只能发生在一个类里
class Parent
{
public:
	Parent()
	{
		cout<<"Parent:printf()..do"<<endl; 
	}
public:
	virtual void func()
	{
		cout<<"Parent:void func()"<<endl;
	}

	virtual void func(int i)
	{
		cout<<"Parent:void func(int i)"<<endl;
	}

	virtual void func(int i, int j)
	{
		cout<<"Parent:void func(int i, int j)"<<endl;
	}

	void abc()
	{
	    printf("abc\n");
	}
};

//child类中发生func重载。
class Child : public Parent
{
public:
	//此函数与父类中同名同参即覆盖，发生重写。虚函数重写将发生多态。
	void func(int i, int j)
	{
		cout<<"Child:void func(int i, int j)"<<endl;
	}

	void func(int i, int j, int k)
	{
		cout<<"Child:void func(int i, int j, int k)"<<endl;
	}

	void abc()//此函数与父类abc发生重写，非虚函数重写为重定义。调用时发生覆盖。
	{
	    printf("abc\n");
	}
	/*想在子类中重载父类abc，父类是不允许的，只能覆盖。
	void abc(int a)//
	{
	    printf("abc\n");
	}*/

};

void run(Parent* p)
{
	p->func(1, 2);
}

int main()
{
	Parent p;
	p.func();
	p.func(1);
	p.func(1, 2);

	Child c;
	//c.func(); //问题1
	c.abc();//正常
	c.Parent::func();
	c.func(1, 2);//发生重写
//多态
	run(&p);
	run(&c);


	return 0;
}